/**  原生与h5交互的公共方法
 *   callBridge   --> 调用原生提供的方法
 *   registBridge --> 注册js方法供原生调用
 *   安卓 WebViewJavascriptBridge： https://github.com/fangj/WebViewJavascriptBridge
 *   IOS WebViewJavascriptBridge： https://github.com/marcuswestin/WebViewJavascriptBridge
 *   交互参数文档 http://192.168.155.25/doc/vue/index.html
 */


window.setupWebViewJavascriptBridge = function (callback) {
    // 第一次调用这个方法的时候，为false
    if (window.WebViewJavascriptBridge) {
        return callback(window.WebViewJavascriptBridge);
    }
    /**
     * 安卓触发事件 再初始化bridge
     */
    document.addEventListener('WebViewJavascriptBridgeReady', function (event) {
        var bridge = event.bridge;
        if (bridge._messageHandler === undefined) {
            bridge.init(function (message, responseCallback) {
                if (responseCallback) {
                    responseCallback('Right back atcha');
                }
            });
        }
        callback(window.WebViewJavascriptBridge);
    }, false);

    // 这段代码的意思就是通知原生执行加载WebViewJavascriptBridge_JS.js中代码的作用,初始化bridge环境
    if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'https://__bridge_loaded__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function () { document.documentElement.removeChild(WVJBIframe); }, 0);
};

/** 原生与h5通过bridge与交互
 *
 * @param {String} bridgeName 调用原生注册的方法名
 * @param {object}
 data 和原生约定好的结构
 * @param {Function} callBack 当原生返回数据时的回调
 */
window.callBridge = function (bridgeName, data, callBack) {
    for (var params = [], $__0 = 3; $__0 < arguments.length; $__0++) {
        params[$__0 - 3] = arguments[$__0];
    }
    if (data instanceof Function) {
        if (callBack) {
            params.unshift(callBack);
        }
        callBack = data;
        data = null;
    } else {
        callBack = callBack || function () {};
    }
    window.setupWebViewJavascriptBridge(function (bridge) {
        bridge.callHandler(bridgeName, data, function (message) {
            callBack(message);
        });
    });
};

/**
 * 原生与h5通过bridge与交互
 * @param {String} bridgeName 注册给原生以调用的方法(标识)
 * @param {*} callBack 原生调用注册方法的回调 --> 回调可以接收两个参数(data, responseCallback)data:原生传过来的参数(JSON串格式), responseCallback(Function):原生回调可以给原生返回值
 */
window.registBridge = function (bridgeName, callBack) {
    window.setupWebViewJavascriptBridge(function (bridge) {
        bridge.registerHandler(bridgeName, callBack);
    });
};

// 全局注册的一些方法

/**
 * 原生调用js的返回事件，能过此方法可以拿到原生的返回事件或安卓返回事件
 */
window.registBridge('goBack', function () {
    window.history.back();
});
/**
 * 原生跳到js的页面: 原生右上角点编辑选项等
 * data:
 */
window.registBridge('goToPage', function (data) {
    data = JSON.parse(data);
    var paramStr = '';
    for (var key in data.params) {
        if (data.params.hasOwnProperty(key)) {
            paramStr += '~' + key + '=' + data.params[key];
        }
    }
    ecui.esr.redirect(data.name + paramStr);
});

window.registBridge('location', function (data, callback) {
    data = JSON.parse(data);
    var cityCode;
    if (data) {
        for (code in mao.cities) {
            if (mao.cities[code].indexOf(data.city) !== -1) {
                cityCode = code;
            }
        }
        data.cityCode = cityCode;
        ecui.esr.setGlobal('location', data);
    }
});

// 首页列表，原生监听scroll事件，通过桥触发h5更新数据
window.registBridge('nativeLetH5fetchData', function () {});

// registBridge('loginSuccess', () => {
//   window.app.$children[0].$children[0].loginSucess();
// });